home *** CD-ROM | disk | FTP | other *** search
/ The Best of MacTutor - S…e Code for Volumes 1 to 5 / The Best of MacTutor - Source Code for Volume 1-5 (Wayzata Technology)(6031)(1990).bin / Source Code / #19 (Apr 87) / zbasic scroll / INDEXSCROLL.BAS next >
BASIC Source File  |  1987-02-19  |  4KB  |  144 lines

  1. REM *************** Text Window Scroll Bar(s) Example ********************
  2. REM *** ZBasic 3.05 or Greater (public domain)  1/87 A.G ZEDCOR, INC.  ***
  3. REM *** with modifications & explainations 2/87 by D. Kelly  MacTutor™ ***
  4. REM **********************************************************************
  5. WINDOW OFF
  6. COORDINATE WINDOW
  7. DIM ST(30,1)
  8. CLEAR 11000
  9. TL = 0
  10. WIDTH -2
  11. False = 0 : True = NOT False
  12. X=MEM(-1) :REM *** Disable Line Wrap ***
  13. WINDOW 1,"INDEX / SCROLL Demo",(50,50)-(450,255),9  : REM ** Initial Window Size **
  14. TEXT 4,9
  15. MENU 1,0,1,"File"
  16. MENU 1,1,1,"Quit"
  17. MENU 2,0,1,"Scroll Type"
  18. MENU 2,1,1,"Normal Scroll"
  19. MENU 2,2,1,"Soft Scroll"
  20. MENU 3,0,1,"INDEX Demo"
  21. MENU 3,1,1,"Add Record/A"
  22. MENU 3,2,1,"Insert Record/I"
  23. MENU 3,3,1,"Edit Record/E"
  24. MENU 3,4,1,"Find Record/F"
  25. MENU 3,5,1,"Delete Record/D"
  26. DIM Ascent,Descent,WidMax,Leading
  27. CALL GETFONTINFO(Ascent)
  28. Height=Ascent+Descent+Leading :REM * Font Size *
  29. OV=False 
  30. OH=True 
  31. Softscroll=False : REM **** Softscroll = Soft-Scroll Flag ****
  32. SCROLL BUTTON 1,OV,OV,TL-1,TL/10,,1 
  33. SCROLL BUTTON 2,OH,OH,255,10,,2
  34. ON DIALOG GOSUB "Dialog"
  35. ON MENU GOSUB "MenuEvent"
  36. DIALOG ON
  37. MENU ON
  38. BREAK ON : REM **> Var 'Softscroll' 0=Normal Scroll 1=Soft Scroll **
  39. "Loop"    : GOTO "Loop" : REM *** Main Event Trapping Loop ***
  40. DIALOG OFF: BREAK OFF :MENU OFF: REM *** Turn OFF dialogs for rest of PGM ***
  41. "MenuEvent"
  42. Menunumber = MENU(0)
  43. Menuitem = MENU(1)
  44. ON Menunumber GOSUB "File","Scroll","Index"
  45. MENU
  46. RETURN
  47. "File"
  48. IF Menunumber = 1 THEN STOP
  49. RETURN
  50. "Scroll"
  51. IF Menuitem = 1 THEN Softscroll = 0 ELSE Softscroll = 1
  52. RETURN
  53. "Index"
  54. ON Menuitem GOSUB "Add","Insert","Change","Find","Delete"
  55. RETURN
  56. "Dialog"  : D=DIALOG(0) : REM **** Dialog Events come here.. ****
  57. ON D GOTO "Button","X","Active","GoAway","Update","X","X","Zoom","Zoom"
  58. "Active"
  59. WINDOW #DIALOG(D) 
  60. RETURN : REM ** Activate this Window **
  61. "Button"
  62. IF DIALOG(D)=1 THEN Buttonvalue=BUTTON(1)  ELSE "Side"
  63. X=OV-Buttonvalue
  64. IF ABS(X) > SL THEN OV=Buttonvalue : CLS : GOTO "Update"
  65. IF X>0 THEN DV=Height :DL=-1 :Leading=0 :P=Ascent ELSE DV=-Height :DL=+1 :Leading=SL+1 :P=(SL-1)*Height+Ascent
  66. WHILE OV<>Buttonvalue
  67. IF Softscroll THEN DV=SGN(DV) : II=1 ELSE II=Height
  68. FOR II=II TO Height : REM **** If THIS LINE if Soft-Scroll Not used *****
  69. SCROLL (0,0)-(W6,W7),,DV : REM ***** SCROLL 1 line or 1 Pixel  *****
  70. PRINT %(-BUTTON(2)*WidMax,P+(DV*(II-Height)));INDEX$(OV-1+Leading);
  71. NEXT 
  72. OV=OV+DL : REM **** Remove NEXT if soft-scroll not used ***
  73. WEND   : RETURN
  74. "Zoom" 
  75. CLS : RETURN : REM ***** ERASE IF ZOOM-IN OR ZOOM OUT *****
  76. "Side" 
  77. SCROLL(0,0)-(W6,W7),(OH-BUTTON(2))*WidMax,0:OH=BUTTON(2)
  78. "Update"
  79. W6=WINDOW(6)-1 : W7=WINDOW(7)-1 : SL=W7/Height
  80. FOR II= OV TO OV+SL-1 : REM ******* Re-Draw Full Screen *******
  81. PRINT %(-BUTTON(2)*WidMax,(II-OV)*Height+Ascent);INDEX$(II);
  82. NEXT
  83. COLOR 0 :BOX FILL 0,SL*Height TO W6,W7 :COLOR -1 :REM *Erase Bottom*
  84. "X" 
  85. RETURN : REM  **** Just RETURN routine ****
  86. "GoAway"
  87. WINDOW CLOSE DIALOG(4):RETURN
  88. "Insert"
  89. WINDOW 2,"Insert",(100,100)-(400,200),-263
  90. TEXT 2,0 : LOCATE 1,2
  91. INPUT "Insert record before #:";N
  92. IF N<0 THEN N=0
  93. IF N>TL THEN N=TL
  94. INPUT "Insert record: ";W$
  95. INDEX$I (N) = W$
  96. TL = TL + 1
  97. WINDOW CLOSE 2
  98. WINDOW 1
  99. SCROLL BUTTON 1,OV,OV,TL-1,TL/10,,1
  100. CLS:GOSUB "Update"
  101. RETURN
  102. "Add"
  103. WINDOW 2,"Insert",(100,100)-(400,200),-263
  104. TEXT 2,0 : LOCATE 1,2
  105. INPUT "Add record: ";W$
  106. INDEX$ (TL) = W$
  107. TL = TL + 1
  108. WINDOW CLOSE 2
  109. WINDOW 1
  110. SCROLL BUTTON 1,OV,OV,TL-1,TL/10,,1
  111. RETURN
  112. "Delete"
  113. WINDOW 2,"Delete",(100,100)-(400,200),-263
  114. TEXT 2,0 : LOCATE 1,2
  115. INPUT "Record number to delete: (<0 to abort)";N
  116. IF N>=0 THEN INDEX$D(N) : TL = TL - 1
  117. WINDOW CLOSE 2
  118. SCROLL BUTTON 1,OV,OV,TL-1,TL/10,,1
  119. WINDOW 1
  120. CLS:GOSUB "Update"
  121. RETURN
  122. "Change"
  123. WINDOW 2,"Change",(100,100)-(400,200),-263
  124. TEXT 2,0 : LOCATE 1,2
  125. INPUT "Record number to Change: (<0 to abort)";N
  126. PRINT "Current record is ";INDEX$(N)
  127. INPUT "Change record to:";W$
  128. IF W$ = "" THEN W$ = INDEX$(N)
  129. INDEX$(N) = W$
  130. WINDOW CLOSE 2
  131. WINDOW 1
  132. CLS:GOSUB "Update"
  133. RETURN
  134. "Find"
  135. WINDOW 2,"Find",(100,100)-(400,200),-263
  136. TEXT 2,0 : LOCATE 1,2
  137. INPUT "Record string to Find:";W$
  138. OV=INDEXF(W$)
  139. WINDOW CLOSE 2
  140. WINDOW 1
  141. SCROLL BUTTON 1,OV,OV,TL-1,TL/10,,1
  142. CLS:GOSUB "Update"
  143. RETURN
  144.